iT邦幫忙

2026 iThome 鐵人賽

DAY 7
1
Software Development

大廠觀落陰:中年工程師的產線鬼故事與生存防身術系列 第 7

在我這邊都沒事啊!一場跨國訂單的故事

  • 分享至 

  • xImage
  •  

「在我電腦上跑是正常的」
「datetime.now() 跟 utcnow(),想想看」

阿姨以前在某間電商工作,某位同事接了「每日結帳報表」的需求,他在 Code 裡面直接下了datetime.today() 來抓當天的日期去撈資料庫。在 Local 端測試,報表完美產出,QA 在台灣的測試機驗證也全數通過。

結果一推上 Production,因為雲端伺服器預設的系統時區是 UTC,比台灣慢了八個小時。台灣時間早上八點,系統以為現在還是昨天的半夜十二點。這導致所有的報表抓錯區間,金流對帳單全部爛掉,財務部一早上班看到帳對不起來,直接拉 P0 警報把所有人叫起來通靈。

這叫做「基準線偏移(Baseline Drift)」。當你的各個零件沒有對齊同一套度量衡,組裝起來的產品就是個隨時會解體的垃圾。

面對時區這個地雷,絕對不能相信工程師的「自覺」,我們必須用強制手段把所有時間操作規範在 UTC 基準線上。

  1. 強制靜態分析攔截
    不要用眼睛去 Code Review 抓時區 Bug。直接在 Linter 裡設定黑名單,抓出所有帶有隱含 Local Time 的系統函式

2.基礎架構的三位一體防禦,在架構設計上,確立不可動搖的時區紀律:
Database:所有時間欄位一律使用 TIMESTAMP WITH TIME ZONE,絕不允許存入單純的字串。
Backend:所有 API 吐出去的 JSON 時間格式,強制符合 ISO-8601 並帶上 Z(UTC 標記)。
Frontend:後端只負責給 UTC,前端自己抓使用者的瀏覽器時區去轉換顯示。後端絕不插手 Local Time 轉換


上一篇
客戶的無理需求是萬惡之源:被逼著寫出垃圾架構,最後黑鍋的卻是你
下一篇
誰准你偷改 API 的?
系列文
大廠觀落陰:中年工程師的產線鬼故事與生存防身術12
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言